type FilterType = Function;

//  获取function的类型
type FilterKeys<T, U extends FilterType> = {
  // keyof 可以用来获取一个对象接口中所有的key值
  // 根据 传入的 T 对象类型创建新类型 key可以是 T 中所有键名的任意一个
  // extends 在此处用于条件判断  判断T[key] 是否可以分配给 U
  [key in keyof T]: T[key] extends U ? key : never;
}[keyof T];
// 从T中取出除去 FilterKeys 的其他所有属性
export type Fix<T, U extends FilterType> = Pick<T, FilterKeys<T, U>>;
// string作为属性类型，属性值的类型是T
export type KeyAndVal<T = any> = Record<string, T>;
